Hyperledger Composer
Table of Contents
安装
前提条件
curl -O https://hyperledger.github.io/composer/latest/prereqs-ubuntu.sh chmod u+x prereqs-ubuntu.sh ./prereqs-ubuntu.sh
安装组件
安装 CLI tools
composer-cli 是最重要的组件, 包含了基本的操作. generator-hyperledger-composer, composer-rest-server, yeoman 这三个虽然不是核心部分, 但在后面与我们自己定义的网络交互时, 可以起到作用.
npm install -g composer-cli@0.20 npm install -g composer-rest-server@0.20 npm install -g generator-hyperledger-composer@0.20 npm install -g yo
如果要卸载:
npm uninstall -g composer-cli composer-rest-server generator-hyperledger-composer
安装 Plyaground
Playground 可以为我们提供 UI 视图.
npm install -g composer-playground@0.20
安装 Hyperledger Fabric
mkdir fabric-dev-servers && cd fabric-dev-servers curl -O https://raw.githubusercontent.com/hyperledger/composer-tools/master/packages/fabric-dev-servers/fabric-dev-servers.tar.gz tar -xvf fabric-dev-servers.tar.gz cd ~/fabric-dev-servers export FABRIC_VERSION=hlfv12 ./downloadFabric.sh
这边安装的是 Hyperledger Fabric v1.2 的版本.
使用
启动和停止 Hyperledger Fabric
cd ~/fabric-dev-servers export FABRIC_VERSION=hlfv12 ./startFabric.sh ./createPeerAdminCard.sh # 关闭 ./stopFabric.sh ./teardownFabric.sh
启动 Playground
在启动 Hyperledger Fabric 后, 运行:
composer-playground
删除当前设置
docker kill $(docker ps -q) docker rm $(docker ps -aq) docker rmi $(docker images dev-* -q)
Playground 教程
利用 Playground, 我们可以建立一个业务网络, 定义资产, 参与者, 交易, 并进行测试.
打开 Playground
composer-playground
创建新的业务网络
Deploy a new business network
输入名称
empty-business-network(从零开始才选择这项, 也可以基于其他网络创建)
Deploy
连接到刚部署的网络
单击 connect now
添加模型文件
(最好自己写一份上传)
单击 Model file, 并用以下代码来替换它们:
/** * My commodity trading network */ namespace org.example.mynetwork asset Commodity identified by tradingSymbol { o String tradingSymbol o String description o String mainExchange o Double quantity --> Trader owner } participant Trader identified by tradeId { o String tradeId o String firstName o String lastName } transaction Trade { --> Commodity commodity --> Trader newOwner }
这个模型定义了一个资产 Commodity, 一个参与者 Trader, 一个交易 Trade.
添加处理逻辑
Composer 使用 JavaScript 来表达业务网络的逻辑, 提交事务进行处理时, 将自动执行这些功能.
Add a file -> Script file -> Add
用以下代码来替换:
/** * Track the trade of a commodity from one trader to another * @param {org.example.mynetwork.Trade} trade - the trade to be processed * @transaction */ async function tradeCommodity(trade) { trade.commodity.owner = trade.newOwner; let assetRegistry = await getAssetRegistry('org.example.mynetwork.Commodity'); await assetRegistry.update(trade.commodity); }
这段代码使用新的所有者 trade.newOwner 来替换原有的所有者 trade.commodity.owner, 然后将修改后的 trade.commodity 保存.
访问控制
这个例子中的网络很简单, 因此不需要修改默认的访问控制.
部署和更新业务网络
单击左下角的 Deploy changes.
测试
添加资产
单击 Test 导航栏.
添加两个参与者.
单击 Trader -> Create New Participant, 用以下代码来替换, 然后单击 Create new.
{ "$class": "org.example.mynetwork.Trader", "tradeId": "TRADER1", "firstName": "Jenny", "lastName": "Jones" }
创建第二个参与者:
{ "$class": "org.example.mynetwork.Trader", "tradeId": "TRADER2", "firstName": "Amy", "lastName": "Williams" }
添加参与者
Commodity -> Assets -> Create New Asset
使用以下代码替换:
{ "$class": "org.example.mynetwork.Commodity", "tradingSymbol": "ABC", "description": "Test commodity", "mainExchange": "Euronext", "quantity": 72.297, "owner": "resource:org.example.mynetwork.Trader#TRADER1" }
在两个参与者之间转移资产
Submit Transaction, 用以下代码替换:
{ "$class": "org.example.mynetwork.Trade", "commodity": "resource:org.example.mynetwork.Commodity#ABC", "newOwner": "resource:org.example.mynetwork.Trader#TRADER2" }
Submit -> All Transactions
基于已有 Fabric 创建业务网络
如果已有 Fabric, 那么我们已经有了 PeerAdmin 和 ChannelAdmin, 在部署之前, 需要再填写一些其他字段.
要提供网络管理员的凭证时, 我们应该填写: Enrollment ID, admin Enrollment Secret, adminpw
使用命令的方式创建业务网络
配置环境
export FABRIC_VERSION=hlfv12 ./startFabric.sh ./createPeerAdminCard.sh
创建网络结构
yo hyperledger-composer:businessnetwork
按照提示, 输入网络名字等信息, 其中, namespace 输入 org.example.mynetwork, generate an empty template network 中, 选择 No.
定义网络
使用以下代码代替 org.example.mynetwork.cto 文件里的内容:
/** * My commodity trading network */ namespace org.example.mynetwork asset Commodity identified by tradingSymbol { o String tradingSymbol o String description o String mainExchange o Double quantity --> Trader owner } participant Trader identified by tradeId { o String tradeId o String firstName o String lastName } transaction Trade { --> Commodity commodity --> Trader newOwner }
我们使用 JavaScript 来执行 .cto 文件中定义的交易. 将 lib/logic.js 中的内容替换如下:
/** * Track the trade of a commodity from one trader to another * @param {org.example.mynetwork.Trade} trade - the trade to be processed * @transaction */ async function tradeCommodity(trade) { trade.commodity.owner = trade.newOwner; let assetRegistry = await getAssetRegistry('org.example.mynetwork.Commodity'); await assetRegistry.update(trade.commodity); }
使用以下代码替换 permissions.acl 中的内容:
/** * Access control rules for tutorial-network */ rule Default { description: "Allow all participants access to all resources" participant: "ANY" operation: ALL resource: "org.example.mynetwork.*" action: ALLOW } rule SystemACL { description: "System ACL to permit all access" participant: "ANY" operation: ALL resource: "org.hyperledger.composer.system.**" action: ALLOW }
生成网络
进入 tutorial-network 目录, 执行命令:
composer archive create -t dir -n .
将会在当前目录生成一个 .bna 文件.
部署业务网络
一般来说, Fabric 管理员需要创建一个 PeerAdmin 身份, 来执行安装链码和启动链码的命令, 不过在这边, Composer 已经自动为我们创建好了.
部署网络, 启动网络:
composer network install --card PeerAdmin@hlfv1 --archiveFile tutorial-network@0.0.1.bna composer network start --networkName tutorial-network --networkVersion 0.0.1 --networkAdmin admin --networkAdminEnrollSecret adminpw --card PeerAdmin@hlfv1 --file networkadmin.card
为了顺利使用这个网络, 需要将 .card 文件导入.
composer card import --file networkadmin.card
测试是否部署成功:
composer network ping --card admin@tutorial-network
生成 REST 服务
composer-rest-server
然后输入名字: admin@tutorial-network
use namespaces in the generated API: never use namespaces
secure the generated API: No
enable event publication: Yes
是否开启 TLS: No
生成应用程序
再开一个终端, 进入 tutorial-network
yo hyperledger-composer:angular
使用 Composer 为单个 Org 部署业务网络
启动 Hyperledger Fabric Network
cd ~/fabric-dev-servers export FABRIC_VERSION=hlfv12 ./stopFabric.sh ./teardownFabric.sh ./downloadFabric.sh ./startFabric.sh composer card delete -c PeerAdmin@fabric-network composer card delete -c admin@tutorial-network # 如果上面的删除命令失败了, 则索性把整个文件删除 rm -fr ~/.composer
创建 .bna 文件
根据前面"使用命令的方式创建业务网络"介绍的内容, 创建 .bna 文件.
创建 connection.json
编辑 connection.json
{ "name": "fabric-network", "x-type": "hlfv1", "version": "1.0.0", "peers": { "peer0.org1.example.com": { "url": "grpc://localhost:7051" } }, "certificateAuthorities": { "ca.org1.example.com": { "url": "http://localhost:7054", "caName": "ca.org1.example.com" } }, "orderers": { "orderer.example.com": { "url": "grpc://localhost:7050" } }, "organizations": { "Org1": { "mspid": "Org1MSP", "peers": [ "peer0.org1.example.com" ], "certificateAuthorities": [ "ca.org1.example.com" ] } }, "channels": { "composerchannel": { "orderers": [ "orderer.example.com" ], "peers": { "peer0.org1.example.com": { "endorsingPeer": true, "chaincodeQuery": true, "eventSource": true } } } }, "client": { "organization": "Org1", "connection": { "timeout": { "peer": { "endorser": "300", "eventHub": "300", "eventReg": "300" }, "orderer": "300" } } } }
创建业务网卡
业务网卡包含连接到业务网络和 Fabric 网络所需的所有信息. 使用 composer card create 来创建业务网卡.
composer card create -p connection.json -u PeerAdmin -c Admin@org1.example.com-cert.pem -k 114aab0e76bf0c78308f89efc4b8c9423e31568da0c340ca187a9b17aa9a4457_sk -r PeerAdmin -r ChannelAdmin
-p connection.json: 填写指向 connection.json 的路径.
-u PeerAdmin: 指定管理员的名称.
-c Admin@org1.example.com-cert.pem: 填写指向证书文件的路径, 路径为 fabric-dev-servers/fabric-scripts/hlfv11/composer/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
-k 114aab0e76bf0c78308f89efc4b8c9423e31568da0c340ca187a9b17aa9a4457_sk: 填写私钥文件路径, 存储在 keystore 里
完整的命令类似如下:
composer card create -p connection.json -u PeerAdmin -c ../fabric-scripts/hlfv11/composer/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem -k ../fabric-scripts/hlfv11/composer/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/114aab0e76bf0c78308f89efc4b8c9423e31568da0c340ca187a9b17aa9a4457_sk -r PeerAdmin -r ChannelAdmin
这条命令会输出 .card 文件到当前目录.
将业务网卡导入给 Fabric 管理员
composer card import -f PeerAdmin@fabric-network.card
将业务网络安装到节点上
可以将这一步理解为在 Fabric 中的安装链码.
composer network install -c PeerAdmin@fabric-network -a tutorial-network@0.0.1.bna
将 card 文件导入到业务网络
composer card import -f admin@tutorial-network.card
测试
composer network ping -c admin@tutorial-network
Generated by Emacs 25.x(Org mode 8.x)
Copyright © 2014 - Pinvon - Powered by EGO